Step Functions で ExecutionAlreadyExistsException が発生するときの対処方法
困っていた内容
Step Functions から別の Step Functions を2回実行しています。1回目の実行は正常に実行できるのですが、2回目の実行の際はExecutionAlreadyExistsException
が記録され、実行に失敗しました。
Step Functions は別の Step Functions を何度も実行できない制約でもあるのでしょうか?回避策があれば教えてください。
{ "resourceType": "states", "resource": "startExecution.sync:2", "error": "StepFunctions.ExecutionAlreadyExistsException", "cause": "Execution Already Exists: 'arn:aws:states:ap-northeast-1:123456789012:execution:hato-child-StateMachine:HelloWorld' (Service: AWSStepFunctions; Status Code: 400; Error Code: ExecutionAlreadyExists; Request ID: 863f4383-9e37-42d0-b3ca-635c9a096182; Proxy: null)" }
どう対応すればいいの?
Step Functions の実行を定義したParameters
のName
が重複していないかご確認ください。
{ "Type":"Task", "Resource":"arn:aws:states:::states:startExecution.sync:2", "Parameters":{ "Input":{ "Comment": "Hello world!" }, "StateMachineArn":"arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld", "Name":"ExecutionName" }, "End":true }
Step Functions の標準ワークフローでは、実行完了後 90 日間は履歴を保持し、同じ名前のワークフローが再実行された場合はExecutionAlreadyExistsException
で実行を失敗します。同じワークフローを複数回実行させたい場合は、重複しない異なる名前を設定する必要があります。
そのため、同じワークフローを複数回実行することはサポートされていますが、Parameters
のName
で指定するワークフローの名前が重複が発生しない値になるように定義するか、Name
を指定しない定義※にする必要があります。
※Name
は必須属性ではなく、指定しない場合は Step Functions が重複しない値を自動生成します。
参考資料
name
The name of the execution. This name must be unique for your AWS account, region, and state machine for 90 days.
独自の実行 ID を指定しない場合、Step Functions が一意の実行 ID を生成します。